环境描述
描述项 | 内容 |
---|---|
操作系统 | CentOS Linux release 7.8.2003 (Core) |
java版本 | java version "1.8.0_161" |
IDEA版本 | 2022.2.2 |
Gradle版本 | 7.5 (使用了 kotlin 语言) |
上接文章 | 在IDEA中使用 Gradle 构建 Java 项目(例三) |
下接文章 | 使用 Gradle 整合 Spring Data JPA(例六) |
1. 在项目中添加 Spring Boot
1.1. 增补 Spring Boot 依赖
到 maven中央仓库 中找到Spring Boot坐标,然后将其填充到 build.gradle.kts
文件中。最后刷新Gradle,Gradle就会将所有Spring Boot的依赖包从 maven 仓库中拉取到本地。
dependencies {
implementation("org.springframework.boot:spring-boot-starter:2.7.3")
implementation("org.springframework.boot:spring-boot-starter-web:2.7.3")
implementation("org.springframework.boot:spring-boot-starter-test:2.7.3")
}
1.2. 更新项目的启动文件
修改 QuestionServiceBootstrap
文件,内容如下
详细内容
package xin.qishuo.question;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class QuestionServiceBootstrap {
public static void main(String[] args) {
SpringApplication.run(QuestionServiceBootstrap.class,args);
}
}
这里需要增加 @SpringBootApplication
注解、SpringApplication.run
方法等。
1.3. 运行 main 方法
因为除了引入 spring-boot-starter 之外,还引入了 spring-boot-starter-web,这样 Spring 会默认在 8080 端口上去启动一个 Tomcat 服务,并且监听该端口,相当于Spring 容器已经启动了。
1.4 让 Spring Boot作为服务来运行
2. 集成 Actuator [ˈæktʃʊˌeɪtə]
2.1. 什么是 Actuator
生产系统中,往往需要对系统实际运行的情况(例如cpu、io、disk、db、业务功能等指标)进行监控运维。在SpringBoot项目中Actuator模块提供了众多HTTP接口端点(Endpoint),来提供应用程序运行时的内部状态信息。
Actuator模块提供了一个监控和管理生产环境的模块,可以使用http、jmx、ssh、telnet等来管理和监控应用。包括应用的审计(Auditing)、健康(health)状态信息、数据采集(metrics gathering)统计等监控运维的功能。同时,提供了可以扩展 Actuator端点(Endpoint)自定义监控指标。这些指标都是以JSON接口数据的方式呈现。
2.2. 增补 Spring Boot Actuator 的依赖
使用Spring Boot Actuator需要加入如下依赖:
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator:2.7.3")
}
引入Actuator依赖后,SpringBoot 在运行时会自动开启 /actuator/health
和 /actuator/info
这两个 endpoint,我们就可以通过这两个 endpoint 来查看当前 SpringBoot 运行的情况。
需要注意:因为 SpringBoot Actuator
会暴露服务的详细信息,为了保障安全性,建议添加安全控制的相关依赖 spring-boot-starter-security
,这样在访问应用监控端点时,都需要输入验证信息。
2.3. Endpoints 介绍
Spring Boot 提供了所谓的 endpoints (下文翻译为:端点)给外部来与应用程序进行访问和交互。
打比方来说,/health 端点
提供了关于应用健康情况的一些基础信息。metrics 端点
提供了一些有用的应用程序指标(JVM 内存使用、系统CPU使用等)。
这些 Actuator 模块本来就有的端点我们称之为原生端点。根据端点的作用的话,我们大概可以分为三大类:
-
应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
-
度量指标类:获取应用程序运行过程中用于监控的度量指标,比如:内存信息、线程池信息、HTTP请求统计等。
-
操作控制类:提供了对应用的关闭等操作类功能。
需要注意的就是:
-
每一个端点都可以通过配置来单独禁用或者启动
-
不同于Actuator 1.x,Actuator 2.x 的大多数端点默认被禁掉。 Actuator 2.x 中的默认端点增加了
/actuator前缀
。默认暴露的两个端点为/actuator/health
和/actuator/info
详细的介绍请参阅 官方网站 的说明。
2.4. health 端点
重新启动 QuestionServiceBootstrap,在浏览器中访问 http://127.0.0.1:8080/actuator/health
。
2.5. 编写测试类验证 health 端点
SmokeTest类的详细内容
package xin.qishuo.question;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
@SpringBootTest
@AutoConfigureMockMvc
public class SmokeTest {
@Autowired
private MockMvc mockMvc;
@Test
void verifyActuator() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/actuator/health"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.status").value("UP"));
}
}
在Spring中,我们要在测试里面启动整个 Spring应用,就要先声明@SpringBootTest 注解,然后它会把整个 Spring 的上下文启动起来。其次,引入了 MockMvc 的对象来进行测试,MockMvc 是 Spring 提供的一个工具类,它可以在测试代码中创建一个请求,并且断言这个请求的结果 。MockMvc 需要通过 @Autowired 在运行期注入进来,如果希望注入这个 Bean 的话,我们还需要声明一个允许自动配置 MockMvc 的@AutoConfigureMockMvc 注解。这时就可以在测试中去调用 MockMvc 来帮助我们进行接口测试了。
2.6. 运行测试来验证health 端点的结果
附录
附录A. 相关联的文章
附录B. 参考
- B站up主鱼松